官方網站
Ballerina是一種開源雲原生的程式語言(用java寫出來的,以後應該會慢慢用Ballerina自己寫出來吧?!),
他把網路中的客戶端client、服務service、資源resource、監聽器listenr的概念直接抽象到語言層面來,所以寫起網路服務會變得更方便。
用Ballerina寫出來的code都能轉換成一張序列圖,讓code的用途一目了然,我覺得這個功能還滿酷的,只是我還不知道怎麼轉換...。
而且最近1.0版本才剛剛正式發布,就來寫個hello world吧!
import ballerina/http;
import ballerina/io;
# 定義一個 API 服務
# 設定監聽端口為 `9090`
service helloworld on new http:Listener(9090) {
# 定義一個讓別人可以請求護取的資源函數
# 存取路徑:`/hello/sayHello`.
#
# + caller - 代表調用這個資源的客戶端
# + request - 請求
resource function sayHello(http:Caller caller, http:Request request) {
// resource資源函數收到請求後,回覆一個訊息給caller客戶端
error? result = caller->respond("Hello Ballerina!");
if (result is error) {
io:println("Error in responding: ", result);
}
}
}
然後執行
再來是做客戶端
他說要寫在main函數裡,
然後用check關鍵字,就可省略error的處理,這只是方便開發,在生產環境裡還是要做error的處理。
import ballerina/http;
import ballerina/io;
public function main() returns error? {
http:Client helloClient = new("http://localhost:9090/hello");
http:Response helloResp = check helloClient->get("/sayHello");
io:println(check helloResp.getTextPayload());
}
最後執行客戶端的程式他就會回傳: Hello Ballerina!
有正常回傳,但是好像有bug.......明明執行的是客戶端但是他卻error說9090已經被佔用了??
然後官方範例還有放一個查詢座標的日出時間的服務,程式碼短耶! 感覺好方便喔
import ballerina/http;
import ballerina/io;
public function main() returns error? {
http:Client sunriseApi = new("http://api.sunrise-sunset.org");
http:Response sunriseResp = check sunriseApi->get("/json?lat=6.9349969&lng=79.8538463");
json sunrisePayload = check sunriseResp.getJsonPayload();
io:println(sunrisePayload);
}```